import { authService } from '@/services/apiService'
import { useUserStore } from '@/stores/user'

// token刷新定时器
let tokenRefreshTimer: number | null = null

// 是否使用快速刷新模式（默认false，生产环境应为false）
let USE_FAST_REFRESH = false;

/**
 * 清除token刷新定时器
 */
export const clearTokenRefreshTimer = () => {
  if (tokenRefreshTimer) {
    clearTimeout(tokenRefreshTimer)
    tokenRefreshTimer = null
  }
}

/**
 * 设置是否使用快速刷新模式
 * @param useFast 是否使用快速刷新模式
 */
export const setFastRefreshMode = (useFast: boolean) => {
  USE_FAST_REFRESH = useFast;
}

/**
 * 设置token刷新定时器（在token过期前5分钟刷新）
 * @param refreshToken 刷新令牌
 * @param userStore 用户store实例
 */
export const setTokenRefreshTimer = (refreshToken: string, userStore: ReturnType<typeof useUserStore>) => {
  clearTokenRefreshTimer()
  
  // 设置刷新间隔（生产环境25分钟，测试环境1分钟）
  const refreshInterval = USE_FAST_REFRESH ? 1 * 60 * 1000 : 25 * 60 * 1000;
  
  // 假设access token有效期为30分钟，我们在25分钟后刷新（测试模式下1分钟后刷新）
  tokenRefreshTimer = window.setTimeout(async () => {
    try {
      const response = await authService.refresh_token(refreshToken)
      const newAccessToken = response.access
      
      // 更新用户store和localStorage
      userStore.updateAccessToken(newAccessToken)
      
      // 设置下一次刷新
      setTokenRefreshTimer(refreshToken, userStore)
    } catch (error) {
      console.error('定时刷新token失败:', error)
      // 如果刷新失败，清除用户信息
      userStore.logout()
    }
  }, refreshInterval)
}

/**
 * 初始化token管理器
 * @param refreshToken 刷新令牌
 */
export const initializeTokenManager = (refreshToken: string) => {
  const userStore = useUserStore()
  setTokenRefreshTimer(refreshToken, userStore)
}

/**
 * 停止token管理器
 */
export const stopTokenManager = () => {
  clearTokenRefreshTimer()
}